/*************************************************************************
> File Name: MyVector.hpp
> Author: hzy
> Created Time: 2023-08-17 09:55:40
> Description:我自己写的类似Vector容器
************************************************************************/
#ifndef _MYVECTOR_H_
#define _MYVECTOR_H_

#include <iostream>

using namespace std;

template <class T>
class MyVector
{
private:
    T *Data;      // 数据元素
    int Size;     // 数组元素的大小
    int Capacity; // 动态数组的容量

public:
    MyVector();
    ~MyVector();

    // 获取动态数组的容量
    int getCapacity();

    // 获取动态数组的大小
    int getSize();

    // 判断动态数组是否为空
    bool isEmpty();

    // 尾插法插入
    void pushBack(T value);

    // 删除末尾的数据元素
    void popBack();

    // 重载[]操作符(访问指定位置的元素)
    T &operator[](int location) const;

    // 按位置location查找数组元素
    T &at(int location) const;

    // 遍历数组元素
    void DisplayArrList();

    // 清空数组元素
    void Clear();

private:
    // 调整动态数组的容量
    void reSize(int newCapacity);

    // 重载输出操作符
    template <class U>
    friend ostream &operator<<(ostream &os, const MyVector<U> &arr);
};

#endif